package fiuba.algo3.algothief.modelo;

import java.util.ArrayList;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

 public class Lugar {
	protected Pista pistaFacil;
	protected Pista pistaMedia;
	protected Pista pistaDificil;
	private String nombre;
	private String acontecimientoFinal;
	
	
	public Lugar() {
		super();
	}
	
	public Lugar(String unString) {
		this.nombre = unString;
		this.acontecimientoFinal = "";
		
	}
	
	public void conPistaFacil (Pista pista) {
		pista.setTipo("facil");
		pistaFacil = pista;
		
	}
	
	public void conPistaMedia (Pista pista) {
		pista.setTipo("media");
		pistaMedia = pista;
		
	}
	
	public void conPistaDificil (Pista pista) {
		pista.setTipo("dificil");
		pistaDificil = pista;
		
	}
	
	public Pista getPista (Novato novato) {
		return pistaFacil;
		
	}
	
	public Pista getPista (Detective detective) {
		return pistaMedia;
		
	}
	
	public Pista getPista (Investigador investigador) {
		return pistaMedia;
		
	}
	
	public Pista getPista (Sargento sargento) {
		return pistaDificil;
		
	}
	
	public String getNombre () {
		return nombre;
	}
	
	public void agregarPista (ArrayList<Pista> pistas) {
		this.conPistaFacil(pistas.get(0));
		this.conPistaMedia(pistas.get(1));
		this.conPistaDificil(pistas.get(2));
	}
	
	public Node serializar(Document doc) {
		ArrayList<Pista> pistas = new ArrayList<Pista>();
		pistas.add(this.pistaFacil);
		pistas.add(this.pistaMedia);
		pistas.add(this.pistaDificil);
		Element element = doc.createElement("Lugar");
		element.setAttribute("nombre", this.nombre);
		Element elementoPistas = doc.createElement("Pistas");
		element.appendChild(elementoPistas);
		for (Pista pista : pistas) {
			elementoPistas.appendChild(pista.serializar(doc));
		}
		return element;
	}
	
	public static Lugar hidratar(Node elemento) {
		Lugar nuevoLugar = new Lugar();
		ArrayList<Pista> pistas = new ArrayList<Pista>();
		nuevoLugar.nombre = ((Element)elemento).getAttribute("nombre");
		Element elementoPistas = (Element) ((Element)elemento).getElementsByTagName("Pistas").item(0);
		for(int i=0; i< elementoPistas.getChildNodes().getLength(); i++) {
			Pista pista = Pista.hidratar(elementoPistas.getChildNodes().item(i));
			pistas.add(pista);	
		}
		nuevoLugar.agregarPista(pistas);
		return nuevoLugar;		
	}

	public void setAcontecimientoFinal(String acontecimientoFinal) {
		this.acontecimientoFinal = acontecimientoFinal;
		
	}

	public String getAcontecimientoFinal() {
		return this.acontecimientoFinal;
	}



}
